
#include "main.h"
#include "systick.h"
void WdtInit(void)
{
    WDT_InitStruType x;

    WDT_RegUnLock();
    x.WDT_Tms = 2000;           //喂狗周期2s
    x.WDT_IE = Enable;
    x.WDT_Rst = Enable;
    x.WDT_Clock = WDT_CLOCK_PCLK;
    WDT_Init(&x);
    WDT_Enable();               //WDT需在解锁里面Enable
    WDT_RegLock();

    NVIC_Init(NVIC_WDT_IRQn, NVIC_Priority_0, Enable);
}
static void gpio_init(void)
{
    GPIO_InitSettingType x;
    //PINT_InitSettingType y;

    x.Signal = GPIO_Pin_Signal_Digital;		 
    x.Dir    = GPIO_Direction_Output;
    x.Func   = GPIO_Reuse_Func0;
    x.ODE    = GPIO_ODE_Output_Disable;	
    x.DS     = GPIO_DS_Output_Normal;	   
    x.PUE    = GPIO_PUE_Input_Disable;	   
    x.PDE    = GPIO_PDE_Input_Disable;

	GPIO_Init(XNLIGHT_L1_OUTPIN, &x);		//
	GPIO_Init(XNLIGHT_R1_OUTPIN, &x);		//
	GPIO_Init(XNLIGHT_R2_OUTPIN, &x);		//
	GPIO_Init(XNLIGHT_L2_OUTPIN, &x);		//
	GPIO_WriteBit(XNLIGHT_L1_OUTPIN, 0);
	GPIO_WriteBit(XNLIGHT_R1_OUTPIN, 0);
	GPIO_WriteBit(XNLIGHT_R2_OUTPIN, 0);
	GPIO_WriteBit(XNLIGHT_L2_OUTPIN, 0);

	GPIO_Init(FWDCOMM_OUTPIN, &x);		//
	GPIO_WriteBit(FWDCOMM_OUTPIN, 1);

	GPIO_Init(KPRE12V_OUTPIN, &x);
	GPIO_WriteBit(KPRE12V_OUTPIN, 0);


	GPIO_Init(PREATMOS_OUTPIN, &x);
	GPIO_WriteBit(PREATMOS_OUTPIN, 0);

	GPIO_Init(BUZZ_PWR_PIN, &x);
	GPIO_Init(BUZZ_FRQ_PIN, &x);
	GPIO_WriteBit(BUZZ_PWR_PIN,0);
	GPIO_WriteBit(BUZZ_FRQ_PIN,0);

	GPIO_Init(LIGHT_OUTPIN, &x);		//
	GPIO_WriteBit(LIGHT_OUTPIN, 0);



	GPIO_Init(PIN_BOAEG_IN1, &x);
	GPIO_Init(PIN_BOAEG_IN2, &x);
	GPIO_WriteBit(PIN_BOAEG_IN1,0);
	GPIO_WriteBit(PIN_BOAEG_IN2,0);	

	GPIO_Init(LOCKK_OUTPIN,&x);
	GPIO_WriteBit(LOCKK_OUTPIN,0);
	GPIO_Init(ADDWZ_OUTPIN,&x);
	GPIO_WriteBit(ADDWZ_OUTPIN,0);	
	GPIO_Init(LOCKZ_OUTPIN,&x);
	GPIO_WriteBit(LOCKZ_OUTPIN,0);		
	GPIO_Init(ZBOX_LIGHT_OUTPIN,&x);
	GPIO_WriteBit(ZBOX_LIGHT_OUTPIN,0);	


	GPIO_Init(FIREOFF_L_OUTPIN, &x);
	GPIO_Init(FIREOFF_R_OUTPIN, &x);
	GPIO_WriteBit(FIREOFF_L_OUTPIN,1);
	GPIO_WriteBit(FIREOFF_R_OUTPIN,1);

	x.PUE    = GPIO_PUE_Input_Enable;	
	GPIO_Init(EN15_OUTPIN, &x);
	GPIO_WriteBit(EN15_OUTPIN, 1);  
	GPIO_Init(CLK_2012_OUTPIN, &x);
	GPIO_Init(DATA_2012_OUTPIN, &x);
	GPIO_WriteBit(CLK_2012_OUTPIN,0);
	GPIO_WriteBit(DATA_2012_OUTPIN,0);    

    x.Signal = GPIO_Pin_Signal_Digital;
    x.Dir    = GPIO_Direction_Input;
    x.Func   = GPIO_Reuse_Func0;
    x.ODE    = GPIO_ODE_Output_Disable;  	
    x.DS     = GPIO_DS_Output_Normal;	   
    x.PUE    = GPIO_PUE_Input_Enable;		
    x.PDE    = GPIO_PDE_Input_Disable;	

	GPIO_Init(DOORSTEM_INPIN, &x);
	GPIO_Init(DOORBAKE_INPIN, &x);	
	GPIO_Init(WATER_BOX_INPIN, &x);
	

	x.PUE    = GPIO_PUE_Input_Disable;
	GPIO_Init(LEAK_PIN, &x);
	GPIO_Init(ADJUST1_BOM_PIN, &x);	 
	GPIO_Init(ADJUST2_BOM_PIN, &x); 
	GPIO_Init(KNOB1_INPIN, &x);	 
	GPIO_Init(KNOB2_INPIN, &x); 	

}
void gpio_set(GPIO_Pin pin,u8 dir)
{
    GPIO_InitSettingType x;
    //PINT_InitSettingType y;

    x.Signal = GPIO_Pin_Signal_Digital;	
    if(dir)	 
        x.Dir =  GPIO_Direction_Output;
    else
        x.Dir =  GPIO_Direction_Input;
    x.Func   = GPIO_Reuse_Func0;
    x.ODE    = GPIO_ODE_Output_Disable;	
    x.DS     = GPIO_DS_Output_Normal;	   
    x.PUE    = GPIO_PUE_Input_Disable;	   
    x.PDE    = GPIO_PDE_Input_Disable;

	GPIO_Init(pin, &x);		//    
    if(dir == 1)
	    GPIO_WriteBit(pin, 0);  
    else 
        GPIO_WriteBit(pin, 1);  
}
void UARTInit(void)
{
    GPIO_InitSettingType x;
    UART_InitStruType y;
    EUART_InitStruType y1;

    x.Signal = GPIO_Pin_Signal_Digital;
    x.Dir    = GPIO_Direction_Output;
    x.Func   = GPIO_Reuse_Func1;
    x.ODE    = GPIO_ODE_Output_Disable;
    x.DS     = GPIO_DS_Output_Strong;
    x.PUE    = GPIO_PUE_Input_Disable;
    x.PDE    = GPIO_PDE_Input_Disable;
	
    GPIO_Init(GPIO_Pin_A23, &x);        //TXD - PA23 天猫通信

    x.Func = GPIO_Reuse_Func2;
    GPIO_Init(GPIO_Pin_B1, &x);         //TXD - PB1 面板通信

    x.Func = GPIO_Reuse_Func1;
    GPIO_Init(GPIO_Pin_B5, &x);         //TXD - PB5 电机通信口
    
    x.Signal = GPIO_Pin_Signal_Digital;
    x.Func = GPIO_Reuse_Func1;
    x.Dir = GPIO_Direction_Input;
    x.ODE = GPIO_ODE_Output_Disable;
    x.DS = GPIO_DS_Output_Strong;
    x.PUE = GPIO_PUE_Input_Disable;
    x.PDE = GPIO_PDE_Input_Disable;
    GPIO_Init(GPIO_Pin_A22, &x);        //RXD - PA22 天猫通信

    x.Func = GPIO_Reuse_Func2;
    GPIO_Init(GPIO_Pin_B0, &x);        //RXD - PB0 面板通信
    
	x.Func = GPIO_Reuse_Func1;          //RXD - PB4 电机通信口
    GPIO_Init(GPIO_Pin_B4, &x);        //

    y.UART_StopBits = UART_StopBits_1;   //1位停止位
    y.UART_TxMode = UART_DataMode_8;     //8位数据位，无奇偶校验位
    y.UART_TxPolar = UART_Polar_Normal;  //发送正级性
	
    y.UART_RxMode = UART_DataMode_8;     //8位数据位，无奇偶校验位
    y.UART_RxPolar = UART_Polar_Normal;  //接收正级性
    y.UART_BaudRate = 9600;//19200;            
    y.UART_ClockSet = UART_Clock_1;      //时钟
    UART_Init(UART0, &y);//天猫通信
    
    y.UART_BaudRate = 9600;             
    UART_Init(UART1, &y); //面板通信
    
    y1.EUART_StopBits = EUART_StopBits_1;  
    y1.EUART_TxMode = EUART_DataMode_8;   
    y1.EUART_TxPolar = EUART_Polar_Normal; 
    y1.EUART_RxMode = EUART_DataMode_8;    
    y1.EUART_RxPolar = EUART_Polar_Normal; 
    y1.EUART_BaudRate = 9600;             
    y1.EUART_ClockSet = EUART_Clock_1;     
    EUART_Init(&y1);   //电机通信

    UART_TBIMConfig(UART0, UART_TBIM_Byte);
    UART_RBIMConfig(UART0, UART_TBIM_Byte);
    UART_ITConfig(UART0, UART_IT_RB, Enable);
    UART_ITConfig(UART0, UART_IT_TC, Enable);
//    NVIC_Init(NVIC_UART0_IRQn, NVIC_Priority_0, Enable);
    UART0_TxEnable();
    UART0_RxEnable();
	
	
    UART_TBIMConfig(UART1, UART_TBIM_Byte);
    UART_RBIMConfig(UART1, UART_TBIM_Byte);
    UART_ITConfig(UART1, UART_IT_RB, Enable);
    UART_ITConfig(UART1, UART_IT_TC, Enable);
//    NVIC_Init(NVIC_UART1_IRQn, NVIC_Priority_0, Enable);
    UART1_TxEnable();
    UART1_RxEnable();
    
    EUART_ModeConfig(EUART_Mode_Uart);
    EUART_TBIMConfig(EUART_TRBIM_Byte);
    EUART_RBIMConfig(EUART_TRBIM_Byte);
    EUART_ITConfig(EUART_IT_RB, Enable);
    EUART_ITConfig(EUART_IT_TC, Enable);
//    NVIC_Init(NVIC_EUART0_IRQn, NVIC_Priority_0, Enable);

    EUART_TxEnable();
    EUART_RxEnable();    
    
}

void ADCInit(void)
{
    ADC_InitStruType x;
    GPIO_InitSettingType y;

    y.Signal = GPIO_Pin_Signal_Analog;
    y.Dir = GPIO_Direction_Input;
    y.Func = GPIO_Reuse_Func0;
    y.ODE = GPIO_ODE_Output_Disable;
    y.DS = GPIO_DS_Output_Normal;
    y.PUE = GPIO_PUE_Input_Disable;
    y.PDE = GPIO_PDE_Input_Disable;

    GPIO_Init(RDOR_INPIN, &y);
    GPIO_Init(RDOL_INPIN, &y);
    GPIO_Init(BOARD_INPIN, &y);
    GPIO_Init(WALL1AD_INPIN, &y);
    GPIO_Init(WALL2AD_INPIN, &y);
	GPIO_Init(FGS1_INPIN, &y);
    //GPIO_Init(FGS2_INPIN, &y);
	GPIO_Init(CURRENT_INPIN, &y);
	
    GPIO_Init(BOX_TEMPR_INPIN, &y);
    GPIO_Init(BOM_TEMPR_INPIN, &y);
    GPIO_Init(TOP_TEMPR_INPIN, &y);


    x.CLKS = ADC_CLKS_PCLK;
    x.CLKDIV = ADC_CLKDIV_1_32;    
    x.VREF_SEL = ADC_VREF_SEL_1_8;
    x.VREFP = ADC_VREFP_VDD;
    x.VREFN = ADC_VREFN_VSS;
    x.SMPS = ADC_SMPS_SOFT;
    x.ST = 0;
    ADC_Init(&x);    
}
void T16Nx_PWM_init()
{
    T16Nx_BaseInitStruType x;
    GPIO_InitSettingType y;
    T16Nx_PWMInitStruType z;
	
	
	
    y.Signal = GPIO_Pin_Signal_Digital;
    y.Dir    = GPIO_Direction_Output;
    y.Func   = GPIO_Reuse_Func1;
    y.ODE    = GPIO_ODE_Output_Disable;
    y.DS     = GPIO_DS_Output_Normal;
    y.PUE    = GPIO_PUE_Input_Enable;
    y.PDE    = GPIO_PDE_Input_Disable;
    GPIO_Init(LIGHT_OUTPIN, &y);
  
    x.T16Nx_ClkS = T16Nx_ClkS_PCLK; // 16M
    x.T16Nx_SYNC = Disable;
    x.T16Nx_EDGE = T16Nx_EDGE_Rise;
    x.T16Nx_Mode = T16Nx_Mode_PWM; //
    x.T16Nx_PREMAT = 256;//256;            //分频 0.0016ms
    T16Nx_BaseInit(T16N2, &x);     //

    z.T16Nx_MOE0 = Enable;                 //
    z.T16Nx_MOE1 = Disable;                 //
    z.T16Nx_POL0 = POSITIVE;               //
    z.T16Nx_POL1 = POSITIVE;               //
    z.T16Nx_PWMMODE = T16Nx_PWMMode_INDEP; //
    z.PWMDZE = Disable;                    //关闭互补死区功能
    T16Nx_PMWOutInit(T16N2, &z);
	T16Nx_MAT0ITConfig(T16N2, T16Nx_Go_No);   //
    T16Nx_MAT1ITConfig(T16N2, T16Nx_Clr_Int);   //
	T16Nx_MAT0Out0Config(T16N2, T16Nx_Out_Low); //
    T16Nx_MAT1Out0Config(T16N2, T16Nx_Out_Low); //

    T16Nx_SetCNT0(T16N2, 0);                       //
	T16Nx_SetMAT0(T16N2, 0);                     //占空比
    T16Nx_SetMAT1(T16N2, 200);                   //周期
    T16Nx_Enable(T16N2);
   
}
void mcu_init(void)
{

	SCU_SysClkSelect(SCU_CLK_HRC);
	delay_10us(10);
	DeviceClockAllEnable();
    User_SysTickInit();	//开系统时钟中断

	WdtInit();
	gpio_init();							//IO端口
	UARTInit();                         
	ADCInit();
    buzz_gpio_init();
	T16Nx_PWM_init();

}
void start_interrupts(void)
{
	SysTick_Enable();
    NVIC_Init(NVIC_UART0_IRQn, NVIC_Priority_0, Enable);
    NVIC_Init(NVIC_UART1_IRQn, NVIC_Priority_0, Enable);
    NVIC_Init(NVIC_EUART0_IRQn, NVIC_Priority_0, Enable);	
}
